#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
using Cephei.QL.Times;
using Cephei.QL;
namespace Cephei.QL.Instruments
{
    /// <summary> 
	/// ! Derived classes must fill the uninitialized data members.  \warning Most methods assume that the cash flows are stored sorted by date, the redemption(s) being after any cash flow at the same date. In particular, if there's one single redemption, it must be the last cash flow,  \ingroup instruments  \test - price/yield calculations are cross-checked for consistency. - price/yield calculations are checked against known good values.
	/// </summary>
    [Guid ("6ADC232B-1F65-4276-B37D-DD573784C0A4"),ComVisible(true)]
	public interface IBond : Cephei.QL.IInstrument
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// 
		/// </summary>
		 Double AccruedAmount(Microsoft.FSharp.Core.FSharpOption<DateTime> d);
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Times.ICalendar Calendar {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.Core.IVector<Cephei.QL.ICashFlow> Cashflows {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double CleanPrice(Double yield, Cephei.QL.Times.IDayCounter dc, QL.CompoundingEnum comp, QL.Times.FrequencyEnum freq, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        /// <summary> 
		/// 
		/// </summary>
		 Double CleanPrice();
        /// <summary> 
		/// 
		/// </summary>
		 Double DirtyPrice(Double yield, Cephei.QL.Times.IDayCounter dc, QL.CompoundingEnum comp, QL.Times.FrequencyEnum freq, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        /// <summary> 
		/// 
		/// </summary>
		 Double DirtyPrice();
        /// <summary> 
		/// 
		/// </summary>
		 Boolean IsExpired {get;}
        /// <summary> 
		/// 
		/// </summary>
		 DateTime IssueDate {get;}
        /// <summary> 
		/// 
		/// </summary>
		 DateTime MaturityDate {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double Notional(Microsoft.FSharp.Core.FSharpOption<DateTime> d);
        /// <summary> 
		/// 
		/// </summary>
		 Boolean IsTradable(Microsoft.FSharp.Core.FSharpOption<DateTime> d);
        /// <summary> 
		/// 
		/// </summary>
		 DateTime NextCashFlowDate(Microsoft.FSharp.Core.FSharpOption<DateTime> d);
        /// <summary> 
		/// 
		/// </summary>
		 Double NextCouponRate(Microsoft.FSharp.Core.FSharpOption<DateTime> d);
        /// <summary> 
		/// 
		/// </summary>
		 DateTime PreviousCashFlowDate(Microsoft.FSharp.Core.FSharpOption<DateTime> d);
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.Core.IVector<Double> Notionals {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.ICashFlow Redemption {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.Core.IVector<Cephei.QL.ICashFlow> Redemptions {get;}
        /// <summary> 
		/// 
		/// </summary>
		 UInt32 SettlementDays {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double SettlementValue(Double cleanPrice);
        /// <summary> 
		/// 
		/// </summary>
		 Double SettlementValue();
        /// <summary> 
		/// 
		/// </summary>
		 Double Yield(Double cleanPrice, Cephei.QL.Times.IDayCounter dc, QL.CompoundingEnum comp, QL.Times.FrequencyEnum freq, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate, Microsoft.FSharp.Core.FSharpOption<Double> accuracy, Microsoft.FSharp.Core.FSharpOption<UInt64> maxEvaluations);
        /// <summary> 
		/// 
		/// </summary>
		 Double Yield(Cephei.QL.Times.IDayCounter dc, QL.CompoundingEnum comp, QL.Times.FrequencyEnum freq, Microsoft.FSharp.Core.FSharpOption<Double> accuracy, Microsoft.FSharp.Core.FSharpOption<UInt64> maxEvaluations);
        /// <summary> 
		/// 
		/// </summary>
		 Double PreviousCouponRate(Microsoft.FSharp.Core.FSharpOption<DateTime> d);
        /// <summary> 
		/// 
		/// </summary>
		 DateTime SettlementDate(Microsoft.FSharp.Core.FSharpOption<DateTime> d);
        /// <summary> 
		/// 
		/// </summary>
		 DateTime StartDate {get;}
    }   

    /// <summary> 
	/// ! Derived classes must fill the uninitialized data members.  \warning Most methods assume that the cash flows are stored sorted by date, the redemption(s) being after any cash flow at the same date. In particular, if there's one single redemption, it must be the last cash flow,  \ingroup instruments  \test - price/yield calculations are cross-checked for consistency. - price/yield calculations are checked against known good values. Factory
	/// </summary>
   	[ComVisible(true)]
    public interface IBond_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        /// <summary> 
		/// Create a Bond
		/// </summary>
	    IBond Create (UInt32 settlementDays, Cephei.QL.Times.ICalendar calendar, Double faceAmount, DateTime maturityDate, Microsoft.FSharp.Core.FSharpOption<DateTime> issueDate, Microsoft.FSharp.Core.FSharpOption<Cephei.Core.IVector<Cephei.QL.ICashFlow>> cashflows, Cephei.QL.IPricingEngine QL_Pricer);
        /// <summary> 
		/// Create a Bond
		/// </summary>
	    IBond Create (UInt32 settlementDays, Cephei.QL.Times.ICalendar calendar, Microsoft.FSharp.Core.FSharpOption<DateTime> issueDate, Microsoft.FSharp.Core.FSharpOption<Cephei.Core.IVector<Cephei.QL.ICashFlow>> coupons, Cephei.QL.IPricingEngine QL_Pricer);
    }
}

